package com.evendai.sipdemo.util

import com.google.gson.Gson
import com.evendai.loglibrary.Timber
import java.lang.reflect.Type

/** json数据解析工具  */
object JsonUtil {

    private val TAG = JsonUtil::class.java.simpleName
    /** 用于解析json的类  */
    private val GSON = Gson()

    /** 把指定的对象转换为String Json */
    fun toJson(src: Any): String? {
        var json: String? = null
        try {
            json = GSON.toJson(src)
        } catch (e: Exception) {
            Timber.e("指定的对象不能转换为json，该对象为：$src")
        }
        return json
    }

    /**
     * 把json字符串转换为JavaBean
     * @param json json字符串
     * @param beanClass JavaBean的Class
     * @return
     */
    fun <T> json2Bean(json: String, beanClass: Class<T>): T? {
        var bean: T? = null
        try {
            bean = GSON.fromJson(json, beanClass)
        } catch (e: Exception) {
            Timber.e(e,"解析json数据时出现异常\njson = $json")
        }

        return bean
    }

    /**
     * 把json字符串转换为JavaBean。如果json的根节点就是一个集合，则使用此方法。
     * type参数的获取方式为：Type type = new TypeToken<集合泛型>(){}.getType();
     * Kotlin方式：val type = object : TypeToken<ArrayList<String>>() {}.type
     * @param json json字符串
     * @return type 指定要解析成的数据类型
    </集合泛型> */
    fun <T> json2Collection(json: String, type: Type): T? {
        var bean: T? = null
        try {
            bean = GSON.fromJson<T>(json, type)
        } catch (e: Exception) {
            Timber.e(e,"解析json数据时出现异常\njson = $json")
        }

        return bean
    }
}